package cryptology1

import (
	"crypto/rand"
	"crypto/rsa"
	"crypto/x509"
	"encoding/pem"
	"os"
)


func RSAprivateKey(size int)  {
	// 1. 生成私钥文件
	// GenerateKey函数使用随机数据生成器random生成一对具有指定字位数的RSA密钥
	// 参数1: Reader是一个全局、共享的密码用强随机数生成器
	// 参数2: 秘钥的位数 - bit
	privateKey,err:=rsa.GenerateKey(rand.Reader,size)
	if err!=nil{
		panic(err)
	}
	// 2. MarshalPKCS1PrivateKey将rsa私钥序列化为ASN.1 PKCS#1 DER编码
	key := x509.MarshalPKCS1PrivateKey(privateKey)
	// 3. Block代表PEM编码的结构, 对其进行设置
	block:=pem.Block{
		Type:    "PRIVATE KEY",
		Bytes:   key,
	}
	// 4. 创建文件
	file,err:=os.Create("privatekey.pem")
	// 5. 使用pem编码, 并将数据写入文件中
	pem.Encode(file, &block)
	// 6. 最后的时候关闭文件
	defer file.Close()
	// 7. 生成公钥文件
	publickey:=privateKey.PublicKey
	serpublicKey, err := x509.MarshalPKIXPublicKey(&publickey)
	if err!=nil{
		panic(err)
	}
	// 8. 编码公钥, 写入文件
	block=pem.Block{
		Type:    "PUBLIC KEY",
		Bytes:   serpublicKey,
	}
	// 4. 创建文件
	file,_=os.Create("publicKey.pem")
	// 5. 使用pem编码, 并将数据写入文件中
	pem.Encode(file, &block)

}